#include "Display.h"

//////////////////////////////////////////////////////////
///////METHOD UNTUK KELAS DISPLAY                 ////////
//////////////////////////////////////////////////////////

//Beberapa method didefinisikan langsung di file header
//karena memiliki deskripsi yang singkat.
//method tersebut antara lain:
// - SetODMeter(int)						-SetSkwMeter(int)
// - SetPlayer(int,int,int)					-SetKurcaci1(int,int,int)
// - SetKurcaci2(int,int,int)				-SetKurcaci3(int,int,int)
// - SetStKricer(int,int,int)

//Method lain dideskripsikan sebagai berikut :

Display::Display() {
//Konstruktor untuk kelas display
//melakukan inisialisasi nilai atribut display dengan nilai default
	int i,j;						//Pass
	for (i = 0;i <= 5;i++) {		//inisialisasi atribut FSave
		for (j = 0;j <= 7;j++) {
			FSave[i][j] = 0;		//0 berarti secara default, akan ditampilkan seluruh grid tidak dapat diakses oleh creature
		}
	}
	for (i = 0;i <= 3;i++) {
		for (j = 0;j <= 2;j++) {
			StKricer[i][j] = -1;	//-1 adalah error handler
		}
	}
	ODMeter = 0;					//inisialisasi atribut ODMeter
	SkwMeter = 0;					//inisialisasi atribut SkwMeter
}

void Display::operator<< (int f[8][10]) {
	int i,j;						//Pass
	for (i = 0;i <= 7; i++) {		//memasukkan nilai array input ke atribut objek dari kelas Display
		for (j = 0; j <=9; j++) {
			FSave[i][j] = f[i][j];
		}
	}
}
void	Display::ChangeCharPos(int c, int x1, int y1, int dir, int x2, int y2) {
//mengubah posisi creature tertentu, bisa player atau kurcaci
//kemudian menampilkan posisi baru dari player atau kurcaci ke layar
	char TempC;																	//variabel temporari
	Go(25+(6*StKricer[c][1]),25-(2*StKricer[c][2]));SetWarna(1,15);				//mencari posisi yang tepat untuk overwrite posisi sebelumnya
	if ((FSave[x1+1][y1+1] > 9) && (FSave[x1+1][y1+1] < 16)) {SetWarna(1,3);}	//jika field sebelumnya sudah disiram
	PrintASCII(GetTipeField(FSave[x1+1][y1+1]));								//menampilkan karakter yang tepat
	SetWarna(1,15);																//mengubah warna kembali seperti semula
	//set karakter ke posisi dan direction baru
	StKricer[c][0] = dir;
	StKricer[c][1] = x2;
	StKricer[c][2] = y2;
	//menampilkan posisi karakter baru
	PrintCharPos(c);
}

/////////////////////////METHOD YANG BERHUBUNGAN DENGAN PRINT KE LAYAR :

void Display::PrintTemplate() {
//Menampilkan latar belakang dari tampilan user interface
//terdiri dari:
//judul,
//info di bawah judul,
//panel kiri-atas dan kiri-bawah,
//bagian tengah untuk field,
//panel kanan-atas dan kanan-bawah,
//ODMeter dan SakawMeter,
//dan InfoBox.

	int i;
	int x,y;
	ClearScr();
	SetWarna(1,10);
	/* BARIS 1 */	PrintBatas(0,1,77);	SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 2 */	PrintASCII(186); cout << "          _     _____ _____  ____________ _____ _____   ___   _____          "; PrintASCII(186);	SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 3 */	PrintASCII(186); cout << "         | |   |  _  /  ___| |  _  \\ ___ \\  _  |  __ \\ / _ \\ /  ___|         "; PrintASCII(186);	SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 4 */	PrintASCII(186); cout << "         | |   | | | \\ `--.  | | | | |_/ / | | | |  \\// /_\\ \\\\ `--.          "; PrintASCII(186); SetWarna(1,15); cout << endl;	
	SetWarna(1,10);
	/* BARIS 5 */	PrintASCII(186); cout << "         | |   | | | |`--. \\ | | | |    /| | | | | __ |  _  | `--. \\         " ; PrintASCII(186); SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 6 */	PrintASCII(186); cout << "         | |___\\ \\_/ /\\__/ / | |/ /| |\\ \\\\ \\_/ / |_\\ \\| | | |/\\__/ /         "; PrintASCII(186); SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 7 */	PrintASCII(186); cout << "         \\_____/\\___/\\____/  |___/ \\_| \\_|\\___/ \\____/\\_| |_/\\____/          "; PrintASCII(186); SetWarna(1,15);cout << endl;
	SetWarna(1,10);
	/* BARIS 8 */	PrintASCII(204);	
					SetWarna(1,11);
					for (i = 1;i <= 34;i++ ) {
						PrintASCII(205);
					}
					cout << "EL JUEGO!";
					for (i = 1;i <= 34;i++ ) {
						PrintASCII(205);
					}
					SetWarna(1,10);
					PrintASCII(185);
					SetWarna(1,15);
					cout << endl;
	SetWarna(1,10);
	/* BARIS 9 */	PrintASCII(186); PrintKsg(77); PrintASCII(186); SetWarna(1,15); cout << endl;
	SetWarna(1,10);
	/* BARIS 10 */	PrintBatas(2,1,77); SetWarna(1,15); cout << endl;
	SetWarna(1,15);
	/* BARIS 11 */	PrintBatas(0,1,20); PrintBatas(0,6,5); PrintBatas(0,1,18); cout << endl;
	/* BARIS 12 */	PrintASCII(186);PrintKsg(20);PrintASCII(186); 
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);StdStr("KURCACI",18);PrintASCII(186); cout << endl;
	/* BARIS 13 */	PrintBatas(1,1,20);PrintBatas(1,6,5);PrintBatas(1,1,18); cout << endl;
	/* BARIS 14 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);SetWarna(10,15);StdStr("[WATER]",18);SetWarna(1,15);PrintASCII(186); cout << endl;
	/* BARIS 15 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					PrintBatas(1,6,5);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 16 */	PrintBatas(2,1,20);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);SetWarna(13,15);StdStr("[HARVEST]",18);	SetWarna(1,15);PrintASCII(186); cout << endl;
	/* BARIS 17 */	PrintBatas(0,1,20);
					PrintBatas(1,6,5);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 18 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);SetWarna(11,15);StdStr("[SLASH]",18);SetWarna(1,15);PrintASCII(186); cout << endl;
	/* BARIS 19 */	PrintBatas(1,1,20);
					PrintBatas(1,6,5);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 20 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintBatas(2,1,18); cout << endl;
	/* BARIS 21 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					PrintBatas(1,6,5);PrintBatas(0,1,18); cout << endl;
	/* BARIS 22 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);StdStr("BRANGKAS",18);PrintASCII(186); cout << endl;
	/* BARIS 23 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					PrintBatas(1,6,5);PrintBatas(1,1,18); cout << endl;
	/* BARIS 24 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 25 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					PrintBatas(1,6,5);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 26 */	PrintASCII(186);PrintKsg(20);PrintASCII(186);
					for (x = 1; x<=6;x++) {
						PrintASCII(186);PrintKsg(5);
					}
					PrintASCII(186);PrintASCII(186);PrintKsg(18);PrintASCII(186); cout << endl;
	/* BARIS 27 */	PrintBatas(2,1,20);
					PrintBatas(2,6,5);
					PrintBatas(2,1,18); cout << endl;
	/* BARIS 29 */	PrintBatas(0,1,77); cout << endl;
	/* BARIS 30 */	PrintASCII(186);PrintKsg(77);PrintASCII(186); cout << endl;
	/* BARIS 31 */	PrintBatas(2,1,77); cout << endl;
	/* BARIS 32 */	PrintBatas(0,1,77); cout << endl;
	/* BARIS 33 */	PrintASCII(186);PrintKsg(77);PrintASCII(186); cout << endl;
	/* BARIS 34 */	PrintBatas(2,1,77);	cout << endl;	
	/* BARIS 28 */	cout << " ";SetWarna(1,11);PrintKsg(76);SetWarna(1,15);cout << endl;
	/* INFO BAR */	PrintBatas(0,1,77);
					for (i = 1; i<=11;i++) {
					cout << endl;
					PrintASCII(186);PrintKsg(77); PrintASCII(186);
					}
					cout << endl;
					PrintBatas(2,1,77);
	//CURSOR PINDAH
}
	
void	Display::PrintJam(int j, int m) {
//menampilkan informasi jam yang terdiri dari 2 dijit jam dan 2 dijit menit
//jam bersifat sinkron dengan tambahan waktu
	Go(3,8);SetWarna(1,10);
	//print 2 dijit jam
	if ((j/10) == 0) 	{cout << "0" << j;}
	else				{cout << j;}
	cout << ":";
	//print 2 dijit menit
	if ((m/10) == 0)	{cout << "0" << m;}
	else				{cout << m;}
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintTgl(int d, int m) {
//menampilkan informasi tanggal yang terdiri dari 2 dijit tanggal dan 2 dijit bulan
//tanggal bersifat sinkron dengan tambahan waktu
	Go(18,8);SetWarna(1,10);
	//print 2 dijit tanggal
	if ((d/10) == 0) 	{cout << "0" << d;}
	else				{cout << d;}
	cout << "/";
	//print 2 dijit bulan
	if ((m/10) == 0)	{cout << "0" << m;}
	else				{cout << m;}
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintLoc(int l) {
//menampilkan informasi lokasi player
	Go(33,8);SetWarna(1,10);
	cout << "     ";
	Go(33,8);
	if (l == 0) {cout << "RUMAH";}			//jika l = 0, print "RUMAH"
	else if (l == 1) {cout << "SAWAH";}		//jika l = 1, print "SAWAH"
	else if (l == 2) {cout << " TOKO";}		//jika l = 2, print "TOKO"
	Go(2,33);SetWarna(1,11);
}

void 	Display::PrintKor(int m,int x, int y) {
//menampilkan koordinat dari player
	Go(39,8);SetWarna(1,10);
	cout << "     ";
	Go(39,8);
	if (m != 2) {cout << "<" << x << "," << y << ">";}
	else		{cout << "<" << x-3 << "," << y-5 << ">";}
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintCua(int x) {
//menampilkan informasi cuaca
//1 cropcircle 2 hujan 3 razia 4 topan
	Go(52,8);SetWarna(1,10);
	cout << "          ";
	Go(52,8);
	if (x == 1) {cout << "CROPCIRCLE";}
	else if (x == 2) {cout << "     HUJAN";}
	else if (x == 3) {cout << "     RAZIA";}
	else if (x == 4) {cout << "     TOPAN";}
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintMus(int x) {
//menampilkan informasi musim
//1 semi 2 badai 3 gugur 4 hujan
	Go(65,8);SetWarna(1,10);
	cout << "          ";
	Go(65,8);
	if (x == 1) {cout << "      SEMI";}
	else if (x == 2) {cout << "     BADAI";}
	else if (x == 3) {cout << "     GUGUR";}
	else if (x == 4) {cout << "     HUJAN";}
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintName(string nama) {
//menampilkan informasi nama player
	Go(3,11);SetWarna(1,15);
	PrintKsg(17);
	Go(3,11);
	StdStr(nama,17);
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintSt(int s) {
//menampilkan informasi status dari player
	Go(3,13);SetWarna(1,15);
	PrintKsg(17);
	Go(3,13);
	StdStr("BLOM OI",17);
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintBuck(int b) {
//menampilkan informasi jumlah buck dari player
	Go(3,14);SetWarna(1,15);
	PrintKsg(17);
	Go(3,14);
	StdStr((ToSTR(b)).append(" BUCKS"),17);
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintField(int m, int ma, int x, int y, AllMap* AM) {
//menampilkan informasi di panel kiri-bawah layar
//asumsi LField adalah LField yang memang ada
	int i;			//PASS
	Go(2,17);
	SetWarna(1,15);
	if (ma > 0) {
		if ((m == 1) && ((AM->GetLFieldXY(x,y))->GetCond() != 1)) {								//LAHAN
			if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 0) {
				StdStr("NO PLANT HERE",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 1) {
				StdStr("GANJA",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 2) {
				StdStr("OPIUM",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 3) {
				StdStr("COCA",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 4) {
				StdStr("TOBACCO",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 5) {
				StdStr("ANGGUR",19);
			}
			else if ((((AM->GetLFieldXY(x,y))->GetPlant())->getID()) == 6) {
				StdStr("MUSHROOM",19); 
			}
			Go(2,19);
			cout << "MATI DALAM " << (((AM->GetLFieldXY(x,y))->GetPlant())->getUmur()) << " HARI";
			Go(2,21);
			cout << "DEWASA METER : ";
			Go(2,22);
			cout << Bar(((AM->GetLFieldXY(x,y))->GetPlant())->getHappyMeter(), ((AM->GetLFieldXY(x,y))->GetPlant())->getTitikDewasa());
			Go(2,23);
			cout << "PANEN METER : ";
			Go(2,24);
			cout << Bar(((AM->GetLFieldXY(x,y))->GetPlant())->getHappyMeter(), ((AM->GetLFieldXY(x,y))->GetPlant())->getTitikPanen());
		}
		else {
			StdStr("NOTHING",19);
			for (i = 19; i <= 25; i++) {
				Go(2,i);StdStr(" ",19);
			}
		}
	}
	else {
		StdStr("TEMBOK",19);
		for (i = 19; i <= 25; i++) {
			Go(2,i);StdStr(" ",19);
		}
	}
	Go(2,33);
	SetWarna(1,11);
}

void	Display::PrintFlXY(int x, int y) {
//menampilkan field x,y dari map Lahan di posisi yang tepat
//dan dengan karakter representasi yang tepat untuk kondisi Field
	int i;										//variabel bantu
	char c;										//variabel bantu
	Go(23+(6*x),25-(2*y));SetWarna(1,15);		//memposisikan kursor di tempat yang tepat
	PrintKsg(5);								//menghapus kondisi display field sebelumnya
	Go(23+(6*x),25-(2*y));						//mengembalikan lagi ke posisi yang tepat
	c = GetTipeField(FSave[x+1][y+1]);			//mendapatkan karakter ascii yang tepat
	//print karakter yang tepat
	for (i=1;i<=5;i++) {		
	if ((FSave[x+1][y+1] > 9) && (FSave[x+1][y+1] < 16)) {SetWarna(1,3);}
	cout << c;
	}
	//kembali ke posisi dan warna semula
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintAllFl() {
//menampilkan seluruh field dengan karakter yang tepat
	int i,j;
	for (i = 0;i <= 5;i++) {
		for (j=0; j <= 7;j++) {
			PrintFlXY(i,j);
		}
		Sleep(70);
	}
}

void	Display::PrintKur(int k1, int k2, int k3) {
//mengisi informasi kurcaci
//untuk masing - masing kurcaci,
	Go(60,14); SetWarna(1,15);
	if (k1 == 0) {StdStr("SLEEP",18);}				//representasi untuk kurcaci 1 (k1)
	else if (k1 == 1) {StdStr("AWAKE",18);}
	Go(60,16);
	if (k2 == 0) {StdStr("SLEEP",18);}				//representasi untuk kurcaci 2 (k2)
	else if (k2 == 1) {StdStr("AWAKE",18);}
	Go(60,18);
	if (k3 == 0) {StdStr("SLEEP",18);}				//representasi untuk kurcaci 3 (k3)
	else if (k3 == 1) {StdStr("AWAKE",18);}
	SetWarna(1,11);
	Go(2,33);
}

void 	Display::PrintInv(Inventory* Kas) {
//mengisi informasi brangkas player
//di panel kanan bawah
	SetWarna(1,15);
	
	//SLOT 1
	Go(61,23);cout << "SLOT 1 : ";
	if ((Kas->getSlot1())->getID()) {
		cout << Kas->Naming((Kas->getSlot1())->getwhatisthis(), (Kas->getSlot1())->getID()) << " - " << (Kas->getAmount1());
	}
	else {
		cout << "KOSONG";
	}
	//SLOT 2
	Go(61,24);cout << "SLOT 2 : ";
	if ((Kas->getSlot2())->getID()) {
		cout << Kas->Naming((Kas->getSlot2())->getwhatisthis(), (Kas->getSlot2())->getID()) << " - " << (Kas->getAmount2());
	}
	else {
		cout << "KOSONG";
	}
	
	//SLOT 3
	Go(61,25);cout << "SLOT 3 : ";
	if ((Kas->getSlot3())->getID()) {
		cout << Kas->Naming((Kas->getSlot3())->getwhatisthis(), (Kas->getSlot3())->getID()) << " - " << (Kas->getAmount3());
	}
	else {
		cout << "KOSONG";
	}
}

void	Display::PrintCharPos(int c) {
//menampilkan creature di posisi karakter yang tepat
	Go(25+(6*StKricer[c][1]),25-(2*StKricer[c][2]));		//tempat yang tepat
	if (c == 0) {SetWarna(12,15);}							//jika ingin print player
	else if (c == 1) {SetWarna(10,15);}						//jika ingin print kurcaci 1
	else if (c == 2) {SetWarna(13,15);}						//jika ingin print kurcaci 2
	else if (c == 3) {SetWarna(11,15);}						//jika ingin print kurcaci 3
	//melihat kondisi direction dan menampilkan karakter yang tepat
	if (StKricer[c][0] == 1) {PrintASCII(30);}
	else if (StKricer[c][0] == 2) {PrintASCII(17);}
	else if (StKricer[c][0] == 3) {PrintASCII(16);}
	else if (StKricer[c][0] == 4) {PrintASCII(31);}
	SetWarna(1,15);
	Go(2,33);SetWarna(1,11);
}

void	Display::PrintAllChar(int m, int k1, int k2, int k3) {
//melihat kondisi posisi creature
//kemudian menampilkan seluruh karakter:
//0 = player
//1 = kurcaci 1
//2 = kurcaci 2
//3 = kurcaci 3
	int i;											//variabel bantu
	PrintCharPos(0);								//print player
	if (m == 1) {									//jika map yang ditampilkan adalah lahan maka tampilkan juga kurcaci
		if  	(k1 == 1)		PrintCharPos(1);	//kurcaci 1
		if		(k2 == 1)		PrintCharPos(2);	//kurcaci 2
		if 		(k3 == 1)		PrintCharPos(3);	//kurcaci 3
	}
}

void	Display::PrintODSKW() {
//menampilkan baru Overdosis dan SkwMeter
	int c,i,j,k;
	Go(2,28);
		if	(ODMeter > 89) {
		c = 12;
		}
		else if (ODMeter > 49) {
			c = 10;
		}
		else {
			c = 11;
		}
		SetWarna(1,c);
		i=(ODMeter*72/100);
		if (i > 72) {i = 72;};
		for	(j=1;j<=i;j++) {
				if ((j%9 == 0) || (j == 1)) {
					SetWarna(15,c);
				if ((j == 1) || (j/9 == 5)) {
					cout << "O";
				}
				else if (j/9 == 1) {
					cout << "V";
				}
				else if (j/9 == 2) {
					cout << "E";
				}
				else if (j/9 == 3) {
					cout << "R";
				}
				else if (j/9 == 4) {
					cout << "D";
				}
				else if ((j/9 == 6) || (j/9 == 8)) {
					cout << "S";
				}
				else if (j/9 == 7) {
					cout << "I";
				}
				SetWarna(1,c);
			}
			else {
				cout << " ";
			}
		}
		SetWarna(1,15);
		for (k=i;k < 72;k++) {
			cout << " ";
		}
		if (ODMeter < 100) {
			cout << " ";
		}
		cout << ODMeter << "%";
	Go(2,31);
		if	(SkwMeter > 89) {
			c = 12;
		}
		else if (SkwMeter > 49) {
			c = 10;
		}
		else {
			c = 11;
		}
		SetWarna(1,c);
		i=(SkwMeter*72/100);
		for	(j=1;j<=i;j++) {
			if ((j+5)%14 == 0) {
				SetWarna(15,c);
				if ((j+5)/14 == 1) {
					cout << "S";
				}
				else if (((j+5)/14 == 2) || ((j+5)/14==4)) {
					cout << "A";
				}
				else if ((j+5)/14 == 3) {
					cout << "K";
				}
				else if ((j+5)/14 == 5) {
					cout << "W";
				}
				SetWarna(1,c);
			}
			else {
				cout << " ";
			}
		}
		SetWarna(1,15);
		for (k=i;k < 72;k++) {
			cout << " ";
		}
		if (SkwMeter != 100) {
			cout << " ";
		}
		cout <<SkwMeter << "%";
		cout << endl;
		PrintBatas(2,1,77);
		cout << endl;
	SetWarna(1,11);
	Go(2,33);
}

void 	Display::PrintInfoBox(int i, string s) {
//menyediakan tempat untuk info box
//i menunjukkan pada baris dari info box, string s akan ditampilkan
	Go(3,(34+i));SetWarna(1,15);
		cout << s;
	Go(3,33);SetWarna(1,11);
}

void	Display::ClearInfoBox() {
//membersihkan seluruh baris dari Info Box
	int i;
	for (i=1;i<=11;i++) {
	Go(3,(34+i));SetWarna(1,15);
		StdStr(" ",75);
	Go(3,33);SetWarna(1,11);
	}
}

void	Display::PrintInfo(string s) {
//menampilkan pesan singkat selama 2 detik
	Go(2,33);
	SetWarna(1,11);
	PrintKsg(75);
	Go(2,33);
	cout << s;
	Sleep(2000);
	Go(2,33);
	PrintKsg(75);
	Go(2,33);
}

//////////////////////SELESAI METHOD UNTUK PRINT KE LAYAR


//////////////////////METHOD KONVERSI
string Display::ToSTR(int i) {
//Konversi integer tertentu i dan mengembalikan bentuk string dari karakter tersebut.
	char TStr[16];		//masih bersifat statik.
	itoa(i,TStr,10);
	return TStr;
}


/////////////////////SELESAI METHOD KONVERSI

/////////////////////METHOD BANTUAN LAIN DARI KELAS DISPLAY

void Display::StdStr(string S, int N) {
//menampilkan string tertentu agar 'seolah' berformat justify 
//dalam space tersedia tertentu
	int i,j,k;						//variabel temporari
	if (S.length() <= N) {
		i = (N - S.length()) / 2;
		for (k = 1;k <= i;k++) {
			cout << " ";			//mengisi space sebelah kiri
		}
		cout << S;
		for (j = 1;j <= i + ((N - S.length()) % 2);j++) {
			cout << " ";			//mengisi space sebelah kanan
		}
	}
}

void Display::PrintBatas(int A,int N,int P) {
//INFORMASI TAMBAHAN:
	//0 : atas
	//1 : tengah
	//2 : bawah  
//menampilkan batas antar grid dan panel
	char l,m,r,p;
	int i,j;
	p = 205;
	if (A == 0) {		//print atas
		l = 201;
		m = 203;
		r = 187;
	}
	else if (A == 1) {	//print tengah
		l = 204;
		m = 206;
		r = 185;
	}
	else if (A == 2) {	//print bawah
		l = 200;
		m = 202;
		r = 188;
	}
	cout << l;
	for (i = 1; i <= N-1; i++) {
		for (j = 1; j <= P; j++) {
			cout << p;
		}
		cout << m;
	}
	for (j = 1; j <= P; j++) {
		cout << p;
	}
	cout << r;
}

void Display::PrintGo(int d) {
//menampilkan bar loading 
	int i; 		//PASS
	Go(1,33);SetWarna(11,12);
	for (i = 1;i <= 78;i++) {
		cout << " ";
		Sleep(d/308);
	}
	Go(1,33);SetWarna(1,11);
	for (i = 1;i <= 78;i++) {
		cout << " ";
		Sleep(d/308);
	}
	Go(2,33);SetWarna(1,11);
}

int Display::GetTipeField(int t) {
//menentukan jenis karakter ascii yang tepat dari masing-masing kondisi field
	int p;
	if 		(t == 0)					{p = 219;}		//tidak bisa bergerak kesini			
	else if (t == 1)					{p = 178;}		//Non-plantable
	else if	((t == 2) || (t == 10))		{p = 176;}		//plantable tanpa tanaman
	else if ((t == 3) || (t == 11))		{p = 241;}		//sudah dicangkul
	else if ((t == 4) || (t == 12))		{p = 231;}		//bibit
	else if ((t == 5) || (t == 13))		{p = 222;}		//dewasa 			--> tidak bisa bergerak kesini
	else if ((t == 6) || (t == 14))		{p = 226;}		//panen  			--> tidak bisa bergerak kesini
	else if ((t == 7) || (t == 15))		{p = 156;}		//mati   			--> tidak bisa bergerak kesini
	else if (t == 8)					{p = 167;}		//tempat tidur		--> tidak bisa bergerak kesini
	else if (t == 9)					{p = 254;}		//tempat save/load
	else								{p = 184;}		//error 			--> menampilkan huruf c dilingkari
	return p;
}

void Display::PrintKsg(int N) {
//menampilkan sejumlah N karakter kosong
	int i;
	for (i = 1;i <= N;i++) {
		cout << " ";
	}
}

string Display::Bar(int A, int B) {
//Menampilkan suatu bar dengan max nilai 100%
//bar yang ditampilkan adalah dalam bentuk string
	int i,j;
	string TempS;
	i = ((A*14) / B);
	for (j = 1; j <= 15;j++) {
		if (j <= i) {
			TempS.push_back(219);
		}
		else {
			TempS.push_back(' ');
		}
	}
	if (A != B) {TempS.push_back(' ');};
	TempS.append(ToSTR(i*100/14));		
	TempS.push_back('%');
	return TempS;
}

void Display::PrintASCII(int a) {
//menampilkan karakter ascii tertentu
	char c;
	c = a;
	cout << c;
}


void Display::SetWarna(int fg, int bg) {
//Method untuk merubah warna konsol commandprompt
//fg adalah warna text sedangkan bg adalah warna background konsol
#ifdef __WIN32__    
	//hanya untuk OS WINDOWS
    int Color = fg + (bg * 16);
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, Color);
#else
	//untuk OS lain, implementasi OS selain windows masih terbatas
	char command[13];
	int attr = 1;
	if (fg==0 && bg==15) {
		attr = 0;
	} else if (fg==15 && bg==4) {
		fg = 7;
	}
	sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg+30, bg+40);
	printf("%s", command);
#endif
	}
	
void Display::ClearScr() {
//method untuk clear screen/membersihkan layar
	#ifdef __WIN32__
		system("cls");
	#else
		system("clear");
	#endif
}

void Display::Go(int x, int y)
{
//khusus untuk windows
//mengubah posisi kursor ke titik x,y dari commandprompt
	#ifdef __WIN32__
		HANDLE hConsoleOutput;
		COORD dwCursorPosition;
		dwCursorPosition.X = x;
		dwCursorPosition.Y = y;
		hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
	#endif
}
